/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.yurendao.shop.goods.service;

import com.yurendao.shop.cart.domain.Cart;
import com.yurendao.shop.cart.domain.CartItem;
import com.yurendao.shop.cart.service.exception.CartException;
import com.yurendao.shop.category.domain.Category;
import com.yurendao.shop.goods.domain.Goods;
import com.yurendao.shop.goods.service.exception.GoodException;
import com.yurendao.shop.user.domain.User;
import java.util.List;

/**
 *
 * @author shilin
 */
public interface GoodService<T> {
    
        /**
     * 1.多级分类
     * 2.后台添加更新删除商品
     * 3.分类查找商品（分页）
     * 4.模糊查找商品（分页）
     * 5.查询商品排序（分页）
     * 6.多条件查询
     */
    
    
    
    
    
    
    /**
     * 添加商品（权限：管理员，商户）
     *
     * @param good
     * @throws GoodException
     */
    void insertGoodItem(Goods good) throws GoodException;

    /**
     * 删除商品（权限：管理员，商户）
     *
     * @param good
     * @throws GoodException
     */
    void deleteGoodItem(Goods good) throws GoodException;

    /**
     * 查找一组商品
     *
     * @param good
     * @return
     * @throws GoodException
     */
    List<CartItem> getGoodsItem(Goods good) throws GoodException;

    /**
     * 更新商品信息（权限：管理员，商户）
     *
     * @param good
     * @throws GoodException
     */
    void updateGoodItem(Goods good) throws GoodException;

    /**
     * 删除一批商品（权限：管理员，商户）
     *
     * @param goods
     * @throws GoodException
     */
    void deleteBatchGoodItem(List<Goods> goods) throws GoodException;

    /**
     * 通过价格区间查找
     *
     * @param Max
     * @param Low
     * @return List<Goods>
     * @throws GoodException
     */
    List<Goods> findByGoodPrice(int Max, int Low) throws GoodException;

    /**
     * 通过商品名查找
     *
     * @param gName
     * @return List<Goods>
     * @throws GoodException
     */
    List<Goods> findByGoodName(String gName) throws GoodException;

    /**
     * 通过商品类型查找
     *
     * @param cName
     * @return List<Goods>
     * @throws GoodException
     */
    List<Goods> findByCategoryName(String cName) throws GoodException;

    /**
     * 模糊搜索 Key By 拼音
     *
     * @param pinYin
     * @return List<Goods>
     * @throws GoodException
     */
    List<Goods> findByPinYin(String pinYin) throws GoodException;

    /**
     * 模糊搜索 Key By 名称的截取片段
     *
     * @param partName
     * @return List<Goods>
     * @throws GoodException
     */
    List<Goods> findByPartName(String partName) throws GoodException;

    /**
     * 模糊搜索 Key By 拼音首字母
     *
     * @param firstPinYin
     * @return List<Goods>
     * @throws GoodException
     */
    List<Goods> findByFirstPingYin(String firstPinYin) throws GoodException;

    /**
     * 按照商品价格分类排序
     *
     * @param goods
     * @return List<Goods>
     * @throws GoodException
     */
    List<Goods> sortByGoodPrice(List<Goods> goods) throws GoodException;

    /**
     * 按照商品种类排序（具体排序方法暂无设想）
     *
     * @param goods
     * @return List<Goods>
     * @throws GoodException
     */
    List<Goods> sortByGoodCatagory(List<Goods> goods) throws GoodException;

    /**
     * 双关键字模糊搜索
     *
     * @param chose1
     * @param chose2
     * @return List<Goods>
     * @throws GoodException
     */
    List<Goods> findByDouble(T chose1, T chose2) throws GoodException;

    /**
     * 三关键字模糊搜索
     *
     * @param chose1
     * @param chose2
     * @param chose3
     * @return List<Goods>
     * @throws GoodException
     */
    List<Goods> findByTrible(T chose1, T chose2, T chose3) throws GoodException;

    /**
     * 添加到购物车
     *
     * @param good
     * @param num
     * @return CartId（购物车唯一标识）
     * @throws GoodException
     */
    public String addToCart(Goods good, int num, Cart cart) throws GoodException;

}
